home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / border / source / dabe_gra.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  17.3 KB  |  665 lines

  1. #include    <egb.h>
  2. #include    <fmc.h>
  3. #include    <string.h>
  4. #include    <math.h>
  5. #include    "dabe.h"
  6.  
  7. extern    char    work[];
  8. extern    char    fwork[];
  9. extern    char    para[];
  10. extern    int        event1_x, event1_y;
  11. extern    int        event2_x, event2_y;
  12. extern    int        event3_x, event3_y;
  13. extern    char    carddata[6][1024];
  14. extern    short    putcard_line[];
  15. extern    short    putysize;
  16. short    rad = 0;
  17.  
  18. void g_putchr(float x, float y, short col_moji, char *printstr)
  19. {
  20.     short        charlen = strlen(printstr);
  21.     
  22.     WORD(para + 0) = x * 16; 
  23.     WORD(para + 2) = (y + 1) * 16;
  24.     WORD(para + 4) = charlen;
  25.     strcpy((para + 6), printstr);
  26.     EGB_writePage( work, 0x00 );
  27.     EGB_paintMode( work, 0x22);
  28.     EGB_color(work, 0, col_moji);
  29.     EGB_sjisString(work, para);
  30. }
  31.  
  32. short g_putchr2(short x, short y, short col_moji, char *printstr, short putlen)
  33. {
  34.     char    *pps;
  35.     short    hannum = 0;
  36.     short    i = 0;
  37.     
  38.     if( putlen > strlen( printstr ) )
  39.         putlen = strlen( printstr );
  40.     else {    
  41.         pps = printstr;
  42.         while( i < putlen ){
  43.             if( iskanji( *pps ) ){
  44.                 pps += 2;
  45.                 i += 2;
  46.             } else {
  47.                 hannum++;
  48.                 pps++;
  49.                 i++;
  50.             }        
  51.         }
  52.         if( fmod( hannum, 2 ) )
  53.             putlen--;
  54.     }
  55.     
  56.     EGB_writePage( work, 0x00 );
  57.     EGB_paintMode( work, 0x22);
  58.     EGB_color(work, 0, col_moji);
  59.     
  60.     WORD(para + 0) = x * 16; 
  61.     WORD(para + 2) = (y + 1) * 16;
  62.     WORD(para + 4) = putlen;
  63.     strcpy( ( para + 6 ), printstr);
  64.     EGB_sjisString( work, para );
  65.  
  66.     return    putlen;
  67. }
  68.  
  69. void g_winbox(short x1, short y1, short x2, short y2,
  70.                short boxcol, short alinecol, short ulinecol) /* BOXを表示 */
  71. {
  72.     EGB_writePage( work, 0x00 );
  73.     EGB_paintMode( work, 0x22);
  74.     
  75.     WORD(para + 0) = x1 * 16;
  76.     WORD(para + 2) = (y1 * 16) + 1;
  77.     WORD(para + 4) = (x2 + 1) * 16;
  78.     WORD(para + 6) = (y2 + 1) * 16;
  79.     EGB_color(work, 0, boxcol);
  80.     EGB_color(work, 2, boxcol);
  81.     EGB_rectangle(work, para);
  82.  
  83.     WORD(para + 0) = 2;
  84.     WORD(para + 2) = x1 * 16;
  85.     WORD(para + 4) = (y1 * 16) + 1;
  86.     WORD(para + 6) = x1 * 16;
  87.     WORD(para + 8) = (y2 + 1) * 16;
  88.     EGB_color(work, 0, alinecol);
  89.     EGB_color(work, 2, alinecol);
  90.     EGB_connect(work, para);
  91.     
  92.     WORD(para + 0) = 3;
  93.     WORD(para + 2) = (x1 * 16) + 2;
  94.     WORD(para + 4) = (y2 + 1) * 16;
  95.     WORD(para + 6) = (x2 + 1) * 16;
  96.     WORD(para + 8) = (y2 + 1) * 16;
  97.     WORD(para + 10) = (x2 + 1) * 16;
  98.     WORD(para + 12) = (y1 * 16) + 1;
  99.     EGB_color(work, 0, ulinecol);
  100.     EGB_color(work, 2, ulinecol);
  101.     EGB_connect(work, para);
  102.  
  103.     g_under_bar( x1, x2, y2, TITCOL, DTICOL );
  104. }
  105.  
  106. void    g_under_bar( float x1, float x2, float y, short boxcol, short linecol )
  107. {    
  108.     WORD(para + 0) = x1 * 16;
  109.     WORD(para + 2) = ( y + 1 ) * 16;
  110.     WORD(para + 4) = (x2 + 1) * 16;
  111.     WORD(para + 6) = ( y + 1 ) * 16 + 4;
  112.     EGB_color(work, 0, linecol );
  113.     EGB_color(work, 2, boxcol );
  114.     EGB_rectangle(work, para);
  115. }    
  116.  
  117. void g_boxfill(float x1, float y1, float x2, float y2, short col)
  118. {
  119.     EGB_writePage( work, 0x00 );
  120.     EGB_paintMode( work, 0x22);
  121.     
  122.     WORD(para + 0) = x1 * 16;
  123.     WORD(para + 2) = y1 * 16;
  124.     WORD(para + 4) = (x2 + 1) * 16;
  125.     WORD(para + 6) = (y2 + 1) * 16;
  126.     EGB_color(work, 0, col);
  127.     EGB_color(work, 2, col);
  128.     EGB_rectangle(work, para);
  129.  
  130. }
  131.  
  132. void g_wintitle(float x1, float x2, float y, short boxcol, short alinecol, 
  133.             short ulinecol, short col_moji, char *pwork, short page, short sound ) /* Titleを表示 */
  134. {
  135.     short    charlen = strlen(pwork);
  136.     
  137.     if( sound == SOUND_ON )    
  138.         open_sound();
  139.     
  140.     EGB_writePage( work, page );
  141.     EGB_paintMode( work, 0x22);
  142.     
  143.     WORD(para + 0) = (x1 * 16) + 1;
  144.     WORD(para + 2) = ((y * 16) + 1) + 1;
  145.     WORD(para + 4) = ((x2 + 1) * 16) - 1;
  146.     WORD(para + 6) = ((y + 1) * 16) - 1;
  147.     EGB_color(work, 0, boxcol);
  148.     EGB_color(work, 2, boxcol);
  149.     EGB_rectangle(work, para);
  150.     
  151.     WORD(para + 0) = 3;
  152.     WORD(para + 2) = ((x2 + 1) * 16) - 1;
  153.     WORD(para + 4) = (y * 16) + 1;
  154.     WORD(para + 6) = x1 * 16;
  155.     WORD(para + 8) = (y * 16) + 1;
  156.     WORD(para + 10) = x1 * 16;
  157.     WORD(para + 12) = ((y + 1) * 16) - 1;
  158.     EGB_color(work, 0, alinecol);
  159.     EGB_color(work, 2, alinecol);
  160.     EGB_connect(work, para);
  161.  
  162.     WORD(para + 0) = 3;
  163.     WORD(para + 2) = (x2 + 1) * 16;
  164.     WORD(para + 4) = ((y * 16) + 1) + 1;
  165.     WORD(para + 6) = (x2 + 1) * 16;
  166.     WORD(para + 8) = (y + 1) * 16;
  167.     WORD(para + 10) = (x1 * 16) + 1;
  168.     WORD(para + 12) = (y + 1) * 16;
  169.     EGB_color(work, 0, ulinecol);
  170.     EGB_color(work, 2, ulinecol);
  171.     EGB_connect(work, para);
  172.     
  173.     if(((x2+1) * 2 - x1 * 2) <= charlen)
  174.         WORD(para + 0) = x1 * 16;
  175.     else
  176.         WORD(para + 0) = (x1*2 + ((x2*2 - x1*2) / 2) - (charlen / 2)) * 8; 
  177.     
  178.     WORD(para + 2) = (y + 1) * 16;
  179.     WORD(para + 4) = charlen;
  180.     strcpy((para + 6), pwork);
  181.     EGB_color(work, 0, col_moji);
  182.     EGB_sjisString(work, para);
  183.     
  184.     if(((x2+1) * 2 - x1 * 2) <= charlen)
  185.         WORD(para + 0) = x1 * 16 + 1;
  186.     else
  187.         WORD(para + 0) = (x1*2 + ((x2*2 - x1*2) / 2) - (charlen / 2)) * 8 + 1;
  188.     EGB_sjisString(work, para);
  189.     
  190.     sound_off();
  191.  
  192. }
  193.  
  194.  
  195. void g_winkom(float x1, float x2, float y, short boxcol, short alinecol, 
  196.                         short ulinecol, short col_moji, char *pwork, short page )
  197. {
  198.     short    charlen = strlen(pwork);
  199.     
  200.     EGB_writePage( work, page );
  201.     EGB_paintMode( work, 0x22);
  202.     
  203.     WORD(para + 0) = (x1 * 16) + 1;
  204.     WORD(para + 2) = ((y * 16) + 1) + 1;
  205.     WORD(para + 4) = ((x2 + 1) * 16) - 1;
  206.     WORD(para + 6) = ((y + 1) * 16) - 1;
  207.     EGB_color(work, 0, boxcol);
  208.     EGB_color(work, 2, boxcol);
  209.     EGB_rectangle(work, para);
  210.     
  211.     WORD(para + 0) = 3;
  212.     WORD(para + 2) = ((x2 + 1) * 16) - 1;
  213.     WORD(para + 4) = (y * 16) + 1;
  214.     WORD(para + 6) = x1 * 16;
  215.     WORD(para + 8) = (y * 16) + 1;
  216.     WORD(para + 10) = x1 * 16;
  217.     WORD(para + 12) = ((y + 1) * 16) - 1;
  218.     EGB_color(work, 0, alinecol);
  219.     EGB_color(work, 2, alinecol);
  220.     EGB_connect(work, para);
  221.  
  222.     WORD(para + 0) = 3;
  223.     WORD(para + 2) = (x2 + 1) * 16;
  224.     WORD(para + 4) = ((y * 16) + 1) + 1;
  225.     WORD(para + 6) = (x2 + 1) * 16;
  226.     WORD(para + 8) = (y + 1) * 16;
  227.     WORD(para + 10) = (x1 * 16) + 1;
  228.     WORD(para + 12) = (y + 1) * 16;
  229.     EGB_color(work, 0, ulinecol);
  230.     EGB_color(work, 2, ulinecol);
  231.     EGB_connect(work, para);
  232.     
  233.     if(((x2+1) * 2 - x1 * 2) <= charlen)
  234.         WORD(para + 0) = x1 * 16;
  235.     else
  236.         WORD(para + 0) = (x1*2 + ((x2*2 - x1*2) / 2) - (charlen / 2)) * 8; 
  237.     
  238.     WORD(para + 2) = (y + 1) * 16;
  239.     WORD(para + 4) = charlen;
  240.     strcpy((para + 6), pwork);
  241.     EGB_color(work, 0, col_moji);
  242.     EGB_sjisString(work, para);
  243. }
  244.  
  245. void    g_put_endicn( float x, float y )
  246. {
  247.     EGB_writePage( work, 0x00 );
  248.     EGB_paintMode( work, 0x22);
  249.     
  250.     DWORD(para + 0) = 0x28000+0x5B*256 ;
  251.     WORD(para + 4) = 0x108 ;
  252.     WORD(para + 6) = event1_x = x * 16;
  253.     WORD(para + 8) = event1_y = y * 16;
  254.     WORD(para + 10) = x * 16 + 31;
  255.     WORD(para + 12) = y * 16 + 31 ;
  256.     EGB_color(work, 0, 0x00 ) ;
  257.     EGB_putBlockColor(work, 0 ,para ) ;
  258. }
  259.  
  260. void    g_rput_endicn( float x, float y )
  261. {
  262.     
  263.     DWORD(para + 0) = 0x28000+0x5B*256 ;
  264.     WORD(para + 4) = 0x108 ;
  265.     WORD(para + 6) = x * 16;
  266.     WORD(para + 8) = y * 16;
  267.     WORD(para + 10) = x * 16 + 31;
  268.     WORD(para + 12) = y * 16 + 31 ;
  269.     EGB_writePage( work, 0x00 );
  270.     EGB_paintMode( work, 0x22);
  271.     EGB_color(work, 0, 0x0F ) ;
  272.     EGB_putBlockColor(work, 0 ,para ) ;
  273. }
  274.  
  275. void    g_put_nexticn( float x, float y )
  276. {
  277.     EGB_writePage( work, 0x00 );
  278.     EGB_paintMode( work, 0x22);
  279.     
  280.     DWORD(para + 0) = 0x28000+0x5D*256 ;
  281.     WORD(para + 4) = 0x108 ;
  282.     WORD(para + 6) = x * 16 - 1;
  283.     WORD(para + 8) = y * 16 - 1;
  284.     WORD(para + 10) = x * 16 + 31 - 1;
  285.     WORD(para + 12) = y * 16 + 31 - 1;
  286.     EGB_color(work, 0, 0x0F ) ;
  287.     EGB_putBlockColor(work, 0 ,para ) ;
  288.     
  289.     DWORD(para + 0) = 0x28000+0x5D*256 ;
  290.     WORD(para + 4) = 0x108 ;
  291.     WORD(para + 6) = x * 16 + 1;
  292.     WORD(para + 8) = y * 16 + 1;
  293.     WORD(para + 10) = x * 16 + 31 + 1;
  294.     WORD(para + 12) = y * 16 + 31 + 1;
  295.     EGB_color(work, 0, 0x00 ) ;
  296.     EGB_putBlockColor(work, 0 ,para ) ;
  297.     
  298.     DWORD(para + 0) = 0x28000+0x5D*256 ;
  299.     WORD(para + 4) = 0x108 ;
  300.     WORD(para + 6) = event2_x = x * 16;
  301.     WORD(para + 8) = event2_y = y * 16;
  302.     WORD(para + 10) = x * 16 + 31;
  303.     WORD(para + 12) = y * 16 + 31 ;
  304.     EGB_color(work, 0, 0x08 ) ;
  305.     EGB_putBlockColor(work, 0 ,para ) ;
  306. }
  307.  
  308. void    g_rput_nexticn( float x, float y )
  309. {
  310.     DWORD(para + 0) = 0x28000+0x5D*256 ;
  311.     WORD(para + 4) = 0x108 ;
  312.     WORD(para + 6) = x * 16;
  313.     WORD(para + 8) = y * 16;
  314.     WORD(para + 10) = x * 16 + 31;
  315.     WORD(para + 12) = y * 16 + 31 ;
  316.     EGB_writePage( work, 0x00 );
  317.     EGB_paintMode( work, 0x22);
  318.     EGB_color(work, 0, 0x0F ) ;
  319.     EGB_putBlockColor(work, 0 ,para ) ;
  320. }
  321.  
  322. void    g_put_backicn( float x, float y )
  323. {
  324.     EGB_writePage( work, 0x00 );
  325.     EGB_paintMode( work, 0x22);
  326.     
  327.     DWORD(para + 0) = 0x28000+0x5C*256 ;
  328.     WORD(para + 4) = 0x108 ;
  329.     WORD(para + 6) = x * 16 - 1;
  330.     WORD(para + 8) = y * 16 - 1;
  331.     WORD(para + 10) = x * 16 + 31 - 1;
  332.     WORD(para + 12) = y * 16 + 31 - 1;
  333.     EGB_color(work, 0, 0x0F ) ;
  334.     EGB_putBlockColor(work, 2 ,para ) ;
  335.     
  336.     DWORD(para + 0) = 0x28000+0x5C*256 ;
  337.     WORD(para + 4) = 0x108 ;
  338.     WORD(para + 6) = x * 16 + 1;
  339.     WORD(para + 8) = y * 16 + 1;
  340.     WORD(para + 10) = x * 16 + 31 + 1;
  341.     WORD(para + 12) = y * 16 + 31 + 1;
  342.     EGB_color(work, 0, 0x00 ) ;
  343.     EGB_putBlockColor(work, 2 ,para ) ;
  344.     
  345.     DWORD(para + 0) = 0x28000+0x5C*256 ;
  346.     WORD(para + 4) = 0x108 ;
  347.     WORD(para + 6) = event3_x = x * 16;
  348.     WORD(para + 8) = event3_y = y * 16;
  349.     WORD(para + 10) = x * 16 + 31;
  350.     WORD(para + 12) = y * 16 + 31 ;
  351.     EGB_color(work, 0, 0x08 ) ;
  352.     EGB_putBlockColor(work, 2 ,para ) ;
  353. }
  354.  
  355. void    g_rput_backicn( float x, float y )
  356. {
  357.     DWORD(para + 0) = 0x28000+0x5C*256 ;
  358.     WORD(para + 4) = 0x108 ;
  359.     WORD(para + 6) = x * 16;
  360.     WORD(para + 8) = y * 16;
  361.     WORD(para + 10) = x * 16 + 31;
  362.     WORD(para + 12) = y * 16 + 31 ;
  363.     EGB_writePage( work, 0x00 );
  364.     EGB_paintMode( work, 0x22);
  365.     EGB_color(work, 0, 0x0F ) ;
  366.     EGB_putBlockColor(work, 2 ,para ) ;
  367. }
  368.  
  369. void    g_put_msgicn( float x, float y )
  370. {
  371.     DWORD(para + 0) = 0x28000+0x18*256 ;
  372.     WORD(para + 4) = 0x108 ;
  373.     WORD(para + 6) = x * 16;
  374.     WORD(para + 8) = y * 16;
  375.     WORD(para + 10) = x * 16 + 31;
  376.     WORD(para + 12) = y * 16 + 31 ;
  377.     EGB_writePage( work, 0x00 );
  378.     EGB_paintMode( work, 0x22);
  379.     EGB_color(work, 0, 0x00 ) ;
  380.     EGB_putBlockColor(work, 0 ,para ) ;
  381. }
  382. void    g_put_erricn( float x, float y )
  383. {
  384.     DWORD(para + 0) = 0x28000+0x1A*256 ;
  385.     WORD(para + 4) = 0x108 ;
  386.     WORD(para + 6) = x * 16;
  387.     WORD(para + 8) = y * 16;
  388.     WORD(para + 10) = x * 16 + 31;
  389.     WORD(para + 12) = y * 16 + 31 ;
  390.     EGB_writePage( work, 0x00 );
  391.     EGB_paintMode( work, 0x22);
  392.     EGB_color(work, 0, 0x00 ) ;
  393.     EGB_putBlockColor(work, 0 ,para ) ;
  394. }
  395.  
  396. void    g_putbotton( short    komnum )
  397. {
  398.     EGB_writePage( work, 0x00 );
  399.     g_putchr( 37, 3 + putysize * ( komnum - 1 ), 0x08, "▲" );
  400.     EGB_color( work, 0, 0x00 );
  401.     WORD( para + 0 ) = 3;
  402.     WORD( para + 2 ) = 37.5 * 16 - 1;
  403.     WORD( para + 4 ) = ( 3 + putysize * ( komnum - 1 ) ) * 16;
  404.     WORD( para + 6 ) = 38 * 16 - 1;
  405.     WORD( para + 8 ) = ( 3 + putysize * ( komnum - 1 ) + 1 ) * 16;
  406.     WORD( para + 10 ) = 37 * 16;
  407.     WORD( para + 12 ) = ( 3 + putysize * ( komnum - 1 ) + 1 ) * 16;
  408.     EGB_connect( work, para );
  409.     EGB_color( work, 0, 0x0F );
  410.     WORD( para + 0 ) = 2;
  411.     WORD( para + 2 ) = 37.5 * 16 - 2;
  412.     WORD( para + 4 ) = ( 3 + putysize * ( komnum - 1 ) ) * 16;
  413.     WORD( para + 6 ) = 37 * 16 - 2;
  414.     WORD( para + 8 ) = ( 3 + putysize * ( komnum - 1 ) + 1 ) * 16;
  415.     EGB_connect( work, para );
  416.     g_putchr( 37, 3 + putysize * ( komnum - 1 ) + 1.5, 0x08, "▼");
  417.     EGB_color( work, 0, 0x00 );
  418.     WORD( para + 0 ) = 2;
  419.     WORD( para + 2 ) = 38 * 16 - 1;
  420.     WORD( para + 4 ) = ( 3 + putysize * ( komnum - 1 ) + 1.5 ) * 16 + 1;
  421.     WORD( para + 6 ) = 37.5 * 16 - 1;
  422.     WORD( para + 8 ) = ( 3 + putysize * ( komnum - 1 ) + 2.5 ) * 16;
  423.     EGB_connect( work, para );
  424.     EGB_color( work, 0, 0x0F );
  425.     WORD( para + 0 ) = 3;
  426.     WORD( para + 2 ) = 38 * 16 - 1;
  427.     WORD( para + 4 ) = ( 3 + putysize * ( komnum - 1 ) + 1.5 ) * 16 + 1;
  428.     WORD( para + 6 ) = 37 * 16 - 2;
  429.     WORD( para + 8 ) = ( 3 + putysize * ( komnum - 1 ) + 1.5 ) * 16 + 1;
  430.     WORD( para + 10 ) = 37.5 * 16 - 2;
  431.     WORD( para + 12 ) = ( 3 + putysize * ( komnum - 1 ) + 2.5 ) * 16;
  432.     EGB_connect( work, para );
  433. }
  434.  
  435.  
  436. /************************************************************************/
  437.  
  438. void    put_komdata(char *mosread_data, short komnum )    
  439. {    
  440.     short        mojilen;
  441.     short        line_cnt;
  442.     short        declen;
  443.     
  444.     EGB_writePage( work, 0x00 );
  445.     
  446.     mojilen = strlen( mosread_data );
  447.     
  448.     if( mojilen <= 18 )
  449.         g_putchr( 2, 3 + putysize * ( komnum - 1 ), CHRCOL, mosread_data );
  450.     else{
  451.         line_cnt = 0;
  452.         while( (mojilen > 18) && (line_cnt < (putysize - 1) ) ){
  453.             declen = g_putchr2( 2, 3 + putysize * ( komnum - 1 ) + line_cnt, CHRCOL, mosread_data, 18 );
  454.             mojilen -= declen;
  455.             mosread_data += declen;
  456.             line_cnt++;
  457.         }
  458.         if( (mojilen > 0) && (line_cnt < (putysize - 1) ) )
  459.             g_putchr( 2, 3 + putysize * ( komnum - 1 ) + line_cnt, CHRCOL, mosread_data);
  460.     }
  461. }    
  462.  
  463. void    put_carddata(char *mosread_data, short komnum )    
  464. {    
  465.     short    mojilen;
  466.     short    line_cnt;
  467.     short    putlen;
  468.     
  469.     mojilen = strlen( mosread_data );
  470.     
  471.     EGB_writePage( work, 0x00 );
  472.     
  473.     if( mojilen <= 50 )
  474.         g_putchr( 12, 3 + putysize * ( komnum - 1 ), CHRCOL, mosread_data );
  475.     else {
  476.         line_cnt = 0;
  477.         while( (mojilen > 50) && (line_cnt < putysize) ){
  478.             putlen = g_putchr2(12, 3 + putysize * ( komnum - 1 ) + line_cnt, CHRCOL, mosread_data, 50 );
  479.             mojilen -= putlen;
  480.             mosread_data += putlen;
  481.             line_cnt++;
  482.         }
  483.         if( (mojilen > 0) && (line_cnt < putysize) )
  484.             g_putchr(12, 3 + putysize * ( komnum - 1 ) + line_cnt, CHRCOL, mosread_data);
  485.     }
  486. }    
  487.  
  488. void    put_roll_carddata( short bot )
  489. {
  490.     short    putcard_len[100];
  491.     short    charlen;
  492.     short    komnum;
  493.     short    i;
  494.     char    *pcd;
  495.     short    hannum;
  496.     short    linecnt;
  497.     
  498.     if( fmod( bot, 2 ) ){
  499.         komnum = ( bot / 2 ) + 1;
  500.         g_putchr( 37, 3 + putysize * ( komnum - 1 ), 0x0F, "▲" );
  501.         BPB_freeon2( 10, 2500 );
  502.     } else {    
  503.         komnum = bot / 2;
  504.         g_putchr( 37, 3 + putysize * ( komnum - 1 ) + 1.5, 0x0F, "▼");
  505.         BPB_freeon2( 10, 3000 );
  506.     }
  507.     
  508.     for( i = 0; i < 30; i++ )
  509.         putcard_len[ i ] = 0;
  510.     charlen = strlen( carddata[ komnum - 1 ] );
  511.     pcd = &carddata[ komnum - 1 ][ 0 ];
  512.     linecnt = 0;
  513.     
  514.     while( charlen > 0 ){    
  515.         if( charlen < 50 ){
  516.             putcard_len[ linecnt ] = charlen;
  517.             break;
  518.         } else {
  519.             i = 0;
  520.             hannum = 0;
  521.             while( i < 50 ){
  522.                 if( iskanji( *pcd ) ){
  523.                     pcd += 2;
  524.                     i += 2;
  525.                 } else {
  526.                     hannum++;
  527.                     pcd++;
  528.                     i++;
  529.                 }        
  530.             }
  531.             if( fmod( hannum, 2 ) ){
  532.                 putcard_len[ linecnt ] = 49;
  533.                 charlen -= 49;
  534.                 pcd -= 2;
  535.             } else {
  536.                 putcard_len[ linecnt ] = 50;
  537.                 charlen -= 50;    
  538.             }
  539.         }
  540.         linecnt++;
  541.     }
  542.     
  543.     
  544.     if( fmod( bot, 2 ) ){
  545.         if( --putcard_line[ komnum - 1 ] < 1 ){
  546.             putcard_line[ komnum - 1 ] = 1;
  547.             g_putbotton( komnum );
  548.             return;
  549.         }
  550.     } else {
  551.         ++putcard_line[ komnum - 1];
  552.         if( putcard_len[ putcard_line[ komnum - 1] + ( putysize - 2 )] <= 0 ){
  553.             putcard_line[ komnum - 1 ]--;
  554.             g_putbotton( komnum );
  555.             return;
  556.         }
  557.     }
  558.  
  559.     pcd = &carddata[ komnum - 1 ][ 0 ];
  560.     for( i = 1; i < putcard_line[ komnum - 1 ]; i++ )
  561.         pcd += putcard_len[ i - 1 ];
  562.     g_boxfill( 12, 3 + putysize * ( komnum - 1 ) + 0.0625, 36, 3 + putysize * ( komnum - 1 ) + (putysize - 1), BOXCOL ); 
  563.     put_carddata( pcd, komnum );    
  564.     
  565.     g_putbotton( komnum );
  566. }
  567.  
  568. void    putmessage( char *swork )
  569. {
  570.     short    charlen;
  571.     short    putlen;
  572.     short    lox, loy;
  573.     short    x;
  574.     
  575.     get_xy( &lox, &loy );
  576.     
  577.     strcpy( fwork, "Message" );
  578.     g_wintitle(lox, lox + 28, loy, TITCOL, UTICOL, DTICOL, TCHCOL, fwork, page0, SOUND_ON );
  579.     g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, UBXCOL, DBXCOL);
  580.     
  581.     charlen = strlen( swork );
  582.     if( charlen <= 48 ){
  583.         x = (54 - ( charlen + 6 )) / 2 / 2;
  584.         g_put_msgicn( lox + 1 + x, loy + 1.5 );
  585.         g_putchr( lox + 1 + x + 3, loy + 2, CHRCOL, swork );
  586.     } else {
  587.         g_put_msgicn( lox + 1, loy + 1.5 );
  588.         putlen = g_putchr2( lox + 4, loy + 2, CHRCOL, swork, 48 );
  589.         charlen -= putlen;
  590.         swork += putlen;
  591.         while( charlen > 54 ){    
  592.             MOS_loop();
  593.             g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, UBXCOL, DBXCOL);
  594.             putlen = g_putchr2( lox + 1, loy + 2, CHRCOL, swork, 54 );
  595.             charlen -= putlen;
  596.             swork += putlen;
  597.         }
  598.         MOS_loop();
  599.         g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, UBXCOL, DBXCOL);
  600.         g_putchr( lox + 1, loy + 2, CHRCOL, swork );
  601.     }
  602. }
  603.  
  604. void    puterror( char *swork )
  605. {
  606.     short    charlen;
  607.     short    putlen;
  608.     short    lox, loy;
  609.     short    x;
  610.     
  611.     get_xy( &lox, &loy );
  612.     
  613.     BPB_freeon2( 40, 3000 );
  614.     strcpy( fwork, "Error" );
  615.     g_wintitle( lox, lox + 28, loy, ETICOL, EUTCOL, EDTCOL, ECHCOL, fwork, page0, SOUND_OFF );
  616.     g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, ETICOL, ETICOL);
  617.     g_under_bar( lox, lox + 28, loy + 3, ETICOL, EDTCOL );
  618.     
  619.     charlen = strlen( swork );
  620.     if( charlen <= 48 ){
  621.         x = (54 - ( charlen + 6 )) / 2 / 2;
  622.         g_put_msgicn( lox + 1 + x, loy + 1.5 );
  623.         g_putchr( lox + 1 + x + 3, loy + 2, CHRCOL, swork );
  624.     } else {
  625.         g_put_msgicn( lox + 1, loy + 1.5 );
  626.         putlen = g_putchr2( lox + 4, loy + 2, CHRCOL, swork, 48 );
  627.         charlen -= putlen;
  628.         swork += putlen;
  629.         while( charlen > 54 ){    
  630.             MOS_loop();
  631.             g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, UBXCOL, DBXCOL);
  632.             g_under_bar( lox, lox + 28, loy + 3, ETICOL, EDTCOL );
  633.             putlen = g_putchr2( lox + 1, loy + 2, CHRCOL, swork, 54 );
  634.             charlen -= putlen;
  635.             swork += putlen;
  636.         }
  637.         MOS_loop();
  638.         g_winbox( lox, loy + 1, lox + 28, loy + 3, BOXCOL, UBXCOL, DBXCOL);
  639.         g_under_bar( lox, lox + 28, loy + 3, ETICOL, EDTCOL );
  640.         g_putchr( lox + 1, loy + 2, CHRCOL, swork );
  641.     }
  642. }
  643.  
  644. void    get_xy( short *x, short *y )
  645. {
  646.     
  647.     if( ++rad > 4 )
  648.         rad = 1;
  649.     
  650.     switch( rad ){
  651.         case    1:    *x = 6;
  652.                     *y = 7;    
  653.                     break;
  654.         case    2:    *x = 7;
  655.                     *y = 10;    
  656.                     break;    
  657.         case    3:    *x = 5;
  658.                     *y = 13;    
  659.                     break;
  660.         default    :    *x = 8;
  661.                     *y = 16;    
  662.                     break;
  663.     }
  664. }
  665.